/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Online;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Victor
 */
public class Mensajes {
    
         /*
     * Variables para la conexión a la BD
     */
        private String bd = "is2"; 
        private String user = "root";
        private String url ="jdbc:mysql://localhost/" + bd+"?zeroDateTimeBehavior=convertToNull";;
        private Connection conexion;
        private java.sql.Statement statement;
        
        public Mensajes(){
            try {
                //Se añade la biblioteca de mysql
                Class.forName("com.mysql.jdbc.Driver");
                //Se conecta a la BD
                conexion = DriverManager.getConnection(url, user,"");
                //Se genera la variable que interacciona con la BD
                statement = conexion.createStatement();
            } catch (SQLException ex) {
            } catch (ClassNotFoundException ex) {
            }
        }
        
       /**
         * Metodo que indica el estado de la conexion
         * @return true si se ha conectado, false en otro caso
        */
        public boolean estado(){
            return (!(statement == null));
        }
        
        public String[] getMensajes(String user){
            String[] mensajes = new String[500];
            int nummensajes = 0;
            try { 
               //Consulta SQL, buscando un usuario que coincida user
                String consulta = "SELECT `identificador` FROM `mensaje` WHERE `Receptor` = \""+user+"\";";
                //Resultado de la consulta
                ResultSet result = statement.executeQuery(consulta);
                result.getRow();
                //Comprobación si hay al menos un resultado
                while (result.next()){
                    mensajes[nummensajes] = result.getString(1);
                    nummensajes++;
                }
            
            } catch (SQLException ex) {
                //Si no se encontraron resultados se devuelve null
                mensajes = null;
            }
            return mensajes;
        }
        
        
        public String[] getMensajesNuevos(String user){
            String[] mensajes = new String[500];
            int nummensajes = 0;
            try { 
               //Consulta SQL, buscando un usuario que coincida user
                String consulta = "SELECT `identificador` FROM `mensaje` WHERE `Receptor` = \""+user+"\" "
                        +"&& Leido = 1;";
                //Resultado de la consulta
                ResultSet result = statement.executeQuery(consulta);
                result.getRow();
                //Comprobación si hay al menos un resultado
                while (result.next()){
                    mensajes[nummensajes] = result.getString(1);
                    nummensajes++;
                }
                if (nummensajes ==0)
                    mensajes = null;
            
            } catch (SQLException ex) {
                //Si no se encontraron resultados se devuelve null
                mensajes = null;
            }
            return mensajes;
        }
        
        public String[] getMensaje(String id){
            String[] mensaje = new String[6];
            mensaje[3]="";
            try { 
               //Consulta SQL, buscando un usuario que coincida user
                String consulta = "SELECT * FROM `mensaje` WHERE `identificador` = "+id+";";
                //Resultado de la consulta
                ResultSet result = statement.executeQuery(consulta);
                result.getRow();
                //Comprobación si hay al menos un resultado
                while (result.next()){
                    mensaje[0] = result.getString(1);
                    mensaje[1] = result.getString(2);
                    mensaje[2] = result.getString(3);
                }
                 
               //Consulta SQL, buscando un usuario que coincida user
                String consulta2 = "SELECT * FROM `tareas de mensaje` WHERE `idMensaje` = "+id+";";
                //Resultado de la consulta
                ResultSet result2 = statement.executeQuery(consulta2);
                result2.getRow();
                //Comprobación si hay al menos un resultado
                while (result2.next()){
                    if (!mensaje[3].equals(""))
                        mensaje[3] = mensaje[3]+", "+result2.getString(2);
                    else
                        mensaje[3] = result2.getString(2);
                }
            
            } catch (SQLException ex) {
                            Logger.getLogger(Mensajes.class.getName()).log(Level.SEVERE, null, ex);

                //Si no se encontraron resultados se devuelve null
                //mensaje = null;
            }
            return mensaje;
        }
    
        
         /**
         * Metodo que da los datos de una tarea
         * @param user
         * @param lista
         * @param name
         * @return cadena de string con los datos de una tarea
         */
        private String[] gettarea(String id){
            //Variable donde se almacenan los datos de la tarea
            String[] datos = new String[3];
            try { 
               //Consulta SQL, buscando una tarea que coincida el identificador de la tarea
                String consulta = "SELECT * FROM tarea T1 Where T1.Identificador = \""+id+"\";";
                //Resultado de la consulta
                ResultSet result = statement.executeQuery(consulta);
                //Comprobación si hay al menos un resultado
                //Comprobación si hay al menos un resultado
                while (result.next()){
                    datos[0] = result.getString(2);
                    datos[1] = result.getString(3);
                    if(datos[1]==null)
                        datos[1] = "0000-00-00";
                    datos[2] = result.getString(4);
                }
            
            } catch (SQLException ex) {
                //Si la consulta falla se devuelve null
                datos = null;
            }
            return datos;
        }
        
        public String[] getTarea(String id,String nombre){
            String[] mensaje = new String[3];
            try { 
               //Consulta SQL, buscando un usuario que coincida user
                String consulta = "SELECT * FROM `tareas de mensaje` WHERE `idMensaje` = \""+id+"\""
                                + " && `Nombre`=\""+nombre+"\";";
                //Resultado de la consulta
                ResultSet result = statement.executeQuery(consulta);
                result.getRow();
                //Comprobación si hay al menos un resultado
                while (result.next()){
                    mensaje[0] = result.getString(2);
                    mensaje[1] = result.getString(3);
                    if(mensaje[1]==null)
                        mensaje[1] = "0000-00-00";
                    mensaje[2] = result.getString(4);
                }
            
            } catch (SQLException ex) {
                //Si no se encontraron resultados se devuelve null
                mensaje = null;
            }
            return mensaje;
        }
        
        
        public boolean addtarea(String id,String idtarea){
            boolean terminado = true;
            String []datos =gettarea(idtarea);
            try { 
               //Consulta SQL, insertado una nueva tarea
                String consulta = "INSERT INTO `tareas de mensaje`(idMensaje, Nombre, Fecha, Tiempo)"+
                        "VALUES ("+id+",\""+datos[0]+"\",\""+datos[1]+"\","+datos[2]+");";
                //Resultado de la consulta
                int result = statement.executeUpdate(consulta);
            } catch (SQLException ex) {
                //Si la consulta falla se indica
                terminado = false;
            }
            return terminado;
        }
        
        
        public int addmensaje(String receptor,String remitente){
            int id = -1;
            try { 
               //Consulta SQL, insertado una nueva tarea
                String consulta = "INSERT INTO `mensaje`(`Receptor`, `Remitente`, `Leido`) VALUES (\""
                        + receptor+"\",\""+remitente+"\",1)";
                //Resultado de la consulta
                int result = statement.executeUpdate(consulta);
                id = ultimo();
            } catch (SQLException ex) {
                //Si la consulta falla se indica
                id = -1;
            }
            return id;
        }
        
        public boolean leido(String id){
            boolean terminado = true;
            try { 
               //Consulta SQL, insertado una nueva tarea
                String consulta = "UPDATE `mensaje` SET `Leido`= 0 WHERE `identificador`= "+id+";";
                //Resultado de la consulta
                int result = statement.executeUpdate(consulta);
            } catch (SQLException ex) {
                //Si la consulta falla se indica
                terminado = false;
            }
            return terminado;
        }
        
        /**
         * Metodo para eliminar un mensaje
         * @param id 
         */
        public void eliminar(String id){
            try { 
               //Consulta SQL, para borrar una tarea
                String consulta = "DELETE FROM `mensaje` WHERE `identificador` = "+id+";";
                //Resultado de la consulta
                int result = statement.executeUpdate(consulta);
            } catch (SQLException ex) {
            }
        }
        
        
        public int ultimo(){
            int ultimo = 0;
            try { 
               //Consulta SQL, buscando un usuario que coincida user
                String consulta = "SELECT identificador FROM `mensaje` WHERE 1;";
                //Resultado de la consulta
                ResultSet result = statement.executeQuery(consulta);
                result.getRow();
                int i = 1;
                //Comprobación si hay al menos un resultado
                while (result.next()){
                   if(Integer.parseInt(result.getString(i))>ultimo)
                       ultimo = Integer.parseInt(result.getString(i));
                }
            
            } catch (SQLException ex) {
                //Si no se encontraron resultados se devuelve null
                ultimo = -1;
            }
            return ultimo;
        }
        
        
        public String[] gettareas(String id){
            String[] tareas = new String[600];
            int numtareas = 0;
            try { 
               //Consulta SQL, buscando un usuario que coincida user
                String consulta = "SELECT Nombre FROM `tareas de mensaje` WHERE `idMensaje` = "+id+";";
                //Resultado de la consulta
                ResultSet result = statement.executeQuery(consulta);
                result.getRow();
                //Comprobación si hay al menos un resultado
                while (result.next()){
                    tareas[numtareas] = result.getString(1);
                    numtareas++;
                }
            
            } catch (SQLException ex) {
                            Logger.getLogger(Mensajes.class.getName()).log(Level.SEVERE, null, ex);

                //Si no se encontraron resultados se devuelve null
                //mensaje = null;
            }
            return tareas;
        }
}
